#include "archivoDocTerm.h"

archivoDocTerm::archivoDocTerm(string ruta) : indice(ruta)
{
}

archivoDocTerm::~archivoDocTerm()
{
}

int archivoDocTerm::agregarRelacion(long idDoc, long idTerm, long frec)
{
	ClaveDocTerm clave(idDoc, idTerm);
	DatoFrec dato(frec);
	indice.insert(clave, dato);
	if(indice.eof())
	{
		indice.readIgual(dato, clave);
		dato.setFrecuencia(dato.getFrecuencia()+frec);
		indice.update(clave,dato);
	}
	return 0;
}

vector<IdTerm_Frec> archivoDocTerm::obtenerIdTermFrec(long idDocumento) {

	ClaveDocTerm clave(idDocumento, 0), claveAux;
	DatoFrec dato;
	vector<IdTerm_Frec> Term_Frec;
	IdTerm_Frec resultado;

	indice.readMayorIgual(dato, clave);
	if(!indice.eof())
		claveAux = indice.getClave();
	
	while(!indice.eof() && claveAux[ID_DOCUMENTO]==clave[ID_DOCUMENTO])
	{
		dato = indice.getDato();
		resultado.IdTermino = claveAux.getIdTermino();
		resultado.Frecuencia = dato.getFrecuencia();
		Term_Frec.push_back(resultado); 
		indice.next();
		if(!indice.eof())
			claveAux = indice.getClave();
	}
	return Term_Frec;

}

long archivoDocTerm::obtenerFrecuencia(long idDoc, long idTerm) {
	ClaveDocTerm clave(idDoc, idTerm);
	DatoFrec dato;
	indice.readIgual(dato, clave);
	if (indice.eof())
		return 0;
	else 
		return dato.getFrecuencia();
}

int archivoDocTerm::eliminarRelacion(long idDoc, long idTerm) {
	ClaveDocTerm clave(idDoc, idTerm);
 	indice.erase(clave);
	return 0;
}

vector<long> archivoDocTerm::eliminarRelaciones(long idDoc) {
	vector<long> terminos;
	vector<IdTerm_Frec> tablafrec;
	vector<IdTerm_Frec>::iterator i;
	
	tablafrec = obtenerIdTermFrec(idDoc);
	for (i = tablafrec.begin(); i != tablafrec.end(); i++) {
		this->eliminarRelacion(idDoc,i->IdTermino);
		terminos.push_back(i->IdTermino);
	} 
	
	return terminos;
} 

